iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Modern Web

區塊鏈&DAPP介紹系列 第 13

[區塊鏈&DAPP介紹 Day13] Solidity 教學 - contracts-2

  • 分享至 

  • xImage
  •  

今天來聊聊關於 contracts 的繼承

關於 contracts 其實它是支援多重繼承,在這方面上是跟 python 是一樣的,它是透過關鍵字 is 來選擇要繼承的對象。我們看看下面的範例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

// 這是父層的合約
contract A {
    function Name() public pure virtual returns (string memory) {
        return "A";
    }
}

//透過 is 的關鍵字 B 繼承 A ,然後透過 ovverride 複寫 Name()
contract B is A {
    function Name() public pure virtual override returns (string memory) {
        return "B";
    }
}

//跟上面一樣 複寫 Name()
contract C is A {
    function Name() public pure virtual override returns (string memory) {
        return "C";
    }
}

// 這個合約繼承 B 跟 C ,但合約繼承會從右邊為繼承,所以它的 override裏面的對象,會針對c 也就是它的 super 層會回覆 c

contract D is B, C {
    //會回覆"C"
    function Name() public pure override(B, C) returns (string memory) {
        return super.foo();
    }
}

再來我們聊聊抽象合約,其實 solidity,有一個抽象合約的規格,我們看看下面範例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
// 這是抽象合約
abstract contract A {
    function Name() public pure virtual returns (string memory);
}
contract B is A {
    function Name() public pure override returns (string memory) {
        return "B";

    }
}

既然有 abstruct ,那就一定有 interface ,明天我們就來聊聊 interface。


上一篇
[區塊鏈&DAPP介紹 Day12] Solidity 教學 - contracts-1
下一篇
[區塊鏈&DAPP介紹 Day14] Solidity 教學 - interfaces
系列文
區塊鏈&DAPP介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言